package edu.ptu.springboot04.interceptor;

import edu.ptu.springboot04.common.controller.AjaxResponse;
import edu.ptu.springboot04.utils.JWTUtil;
import edu.ptu.springboot04.utils.ResponseUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 权限验证拦截器，用于验证HTTP请求的JWT令牌
 *
 * @BelongsProject: springboot04
 * @BelongsPackage: edu.ptu.springboot04.interceptor
 * @Author: HYJ
 * @CreateTime: 2025-03-21  21:42
 * @Description: 实现请求鉴权的拦截器，检查请求头中的token字段
 * 验证规则：
 * 1. 当token不存在或验证失败时，返回401未授权响应
 * 2. 验证通过时放行请求
 * @Version: 1.0
 */
@Component
public class AuthInterceptor implements HandlerInterceptor {

    /**
     * 前置拦截处理（Controller方法执行前）
     *
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param handler  被调用的处理器对象
     * @return 验证结果：true-放行，false-拦截
     * @throws Exception 处理过程中可能抛出的异常
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取请求头中的token
        String token = request.getHeader("token");

        // 如果token为空或者token验证失败
        if (token == null || !JWTUtil.vetifyToken(token)) {

            // 设置响应内容类型
            response.setContentType("application/json;charset=utf-8");
            // 返回未登录或登录超时的错误信息
            ResponseUtil.toResponse(response, AjaxResponse.authError("未登录或登录超时"));
            return false;
        }
        return true;
    }
}
